[PATCH 9 of 9] MD: raid5 do not set fullsync

Patch name: md-raid5-do-not-set-fullsync.patch

Add new flag for struct mdk_rdev_s to indicate when recovery can use bitmap

The version 2 superblock routines (device-mapper) can tell if a device is
in-sync, in need of partial (bitmap aided) recovery, or in need of complete
recovery. The raid5 code assumes that if a device is not in-sync, then it must
undergo complete recovery - it does not honor the bitmap. The flag
'RecoverByBitmap' has been introduced to force raid5 not to set
'conf->fullsync' if the superblock routines have already determined that only
a partial recovery is necessary.

RFC-by: Jonathan Brassow <jbrassow [at] redhat.com>

Index: linux-2.6/drivers/md/raid5.c
============================================================ =======
--- linux-2.6.orig/drivers/md/raid5.c
+++ linux-2.6/drivers/md/raid5.c
[at] [at] -4858,7 +4858,7 [at] [at] static raid5_conf_t *setup_conf(mddev_t
printk(KERN_INFO "md/raid:%s: device %s operational as raid"
" disk %d\n",
mdname(mddev), bdevname(rdev->bdev, b), raid_disk);
- } else
+ } else if (!test_bit(RecoverByBitmap, &rdev->flags))
/* Cannot rely on bitmap to complete recovery */
conf->fullsync = 1;
}
Index: linux-2.6/drivers/md/md.c
============================================================ =======
--- linux-2.6.orig/drivers/md/md.c
+++ linux-2.6/drivers/md/md.c
[at] [at] -2009,8 +2009,10 [at] [at] static int super_2_validate(mddev_t *mdd
if (test_bit(Faulty, &rdev->flags)) {
clear_bit(Faulty, &rdev->flags);
clear_bit(In_sync, &rdev->flags);
+ set_bit(RecoverByBitmap, &rdev->flags);
rdev->recovery_offset = 0;
- printk(KERN_INFO "md: %s: Dev #%d previously marked as failed\n",
+ printk(KERN_INFO
+ "md: %s: Dev #%d recovering from transient failure\n",
mdname(mddev), rdev->raid_disk);
}

Index: linux-2.6/drivers/md/md.h
============================================================ =======
--- linux-2.6.orig/drivers/md/md.h
+++ linux-2.6/drivers/md/md.h
[at] [at] -79,6 +79,8 [at] [at] struct mdk_rdev_s
* until it is cleared */
#define FirstUse 9 /* Used by device-mapper interface when
* initializing first-time devices. */
+#define RecoverByBitmap 10 /* Used by device-mapper to ensure
+ * this device is recovered by bitmap. */
wait_queue_head_t blocked_wait;

int desc_nr; /* descriptor index in the superblock */
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo [at] vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Jonathan Brassow [ Di, 24 Mai 2011 05:07 ] [ ID #2059959 ]
Linux » gmane.linux.raid » [PATCH 9 of 9] MD: raid5 do not set fullsync

Vorheriges Thema: [PATCH] MD: move thread wakeups into resume
Nächstes Thema: [PATCH 8 of 9] MD: add bitmap support